Skip to content

Add declarative benchmark matrices and shared workflows#8757

Draft
connortsui20 wants to merge 3 commits into
developfrom
ct/bench-declarative
Draft

Add declarative benchmark matrices and shared workflows#8757
connortsui20 wants to merge 3 commits into
developfrom
ct/bench-declarative

Conversation

@connortsui20

@connortsui20 connortsui20 commented Jul 14, 2026

Copy link
Copy Markdown
Member

Rationale

Benchmark coverage was duplicated across hand-maintained SQL matrices and two nearly identical Rust micro-benchmark jobs. This made it difficult to see what CI runs and allowed the workflows to drift.

This PR moves all benchmark declarations into one deliberately obvious place: bench_orchestrator/benchmarks.py. BENCHMARKS declares the SQL suites and supported targets, PROFILES declares the SQL coverage used by each workflow, and MICRO_BENCHMARKS lists the Rust benchmark binaries. Matrix rendering remains separate in matrix.py.

The implementation remains deliberately concrete: there is no generic predicate or tag language.

Commit structure

  1. feat(bench-orchestrator): declare benchmark matrix profiles
    • Adds the declaration model, CLI command, documentation, and focused contract tests.
  2. refactor(ci): resolve SQL benchmark matrices from profiles
    • Replaces the duplicated SQL YAML matrices with the declarative profiles.
  3. refactor(ci): share Rust micro-benchmark workflow
    • Replaces the duplicated develop/PR Rust jobs with one reusable workflow.

Behavior

A semantic comparison against the removed YAML confirms that the generated develop and nightly SQL matrices are exact matches, including IDs, names, target ordering, scale-factor strings, and remote paths.

The default PR SQL profile intentionally fixes the inconsistencies described in #4935:

  • adds Appian and TPC-H SF=10 on S3;
  • removes Arrow from the two NVMe TPC-H jobs so every default PR job uses DataFusion/DuckDB × Parquet/Vortex.

The explicit full-PR action uses the complete declared target set. The Rust micro-benchmark consolidation preserves the existing mode-specific comparison, upload, ingest, profiling, and failure-reporting behavior.

API impact

No Vortex library APIs change. vx-bench gains the matrix subcommand; its existing commands are unchanged.

@joseph-isaacs

Copy link
Copy Markdown
Contributor

Do we not use yml for the ci ones? Is this hook into there?

@connortsui20 connortsui20 marked this pull request as draft July 15, 2026 13:09
@connortsui20 connortsui20 force-pushed the ct/bench-declarative branch from 5d4d6ee to 521a932 Compare July 15, 2026 14:07

Copy link
Copy Markdown
Member Author

@joseph-isaacs Yes — it's now hooked into the workflow YAML, not just a standalone module. The benchmark workflows resolve their matrix from a plan job that runs vx-bench matrix <profile> and feed it into the bench job via fromJSON:

  • sql-benchmarks.yml — the two inline full/base JSON matrices are deleted; it now takes a profile input and resolves it.
  • bench-core.yml (new) — reusable micro-benchmark workflow, replacing the duplicated steps that were copy-pasted across bench.yml/bench-pr.yml.
  • bench.yml, bench-pr.yml, sql-pr.yml, nightly-bench.yml — thin callers passing a profile (develop/pr/nightly/micro).

Net −549 lines across the workflows. develop/nightly resolve to the same target sets as before; the source of truth is bench-orchestrator/bench_orchestrator/matrix.py.


Generated by Claude Code

@connortsui20 connortsui20 force-pushed the ct/bench-declarative branch from 2b980ae to 51cd9f1 Compare July 15, 2026 16:58
@vortex-data vortex-data deleted a comment from codspeed-hq Bot Jul 15, 2026
@connortsui20 connortsui20 force-pushed the ct/bench-declarative branch from ffc2b35 to 2be6840 Compare July 15, 2026 18:49
@codspeed-hq

codspeed-hq Bot commented Jul 15, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

✅ 1698 untouched benchmarks
⏩ 9 skipped benchmarks1


Comparing ct/bench-declarative (51db3b2) with develop (cdaa5a5)

Open in CodSpeed

Footnotes

  1. 9 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

connortsui20 and others added 2 commits July 15, 2026 16:14
Define SQL benchmarks once, then resolve named profiles into the GitHub Actions matrix shape. Add the vx-bench matrix command, documentation, and focused regression coverage for selection, targets, storage fields, and preserved develop/nightly behavior.

This establishes the source of truth independently of the workflow migration and addresses #4935.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Replace the duplicated full/base YAML matrices with a plan job that resolves the requested bench-orchestrator profile. Wire develop, PR, full-PR, and nightly callers to explicit profiles, derive remote paths from matrix metadata, and preserve the previous nightly iteration count.

Build lance-bench whenever a resolved entry contains a Lance target so the full PR profile and its built backends stay consistent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
@connortsui20 connortsui20 force-pushed the ct/bench-declarative branch from f3331ad to 80f1d97 Compare July 15, 2026 20:15
Declare the two Rust micro-benchmark binaries in a small dedicated resolver and expose them through the existing matrix command. Replace the duplicated develop and PR jobs with one reusable workflow while preserving their mode-specific result handling.

Keep this separate from the SQL profile migration so each change can be reviewed and landed independently.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
@connortsui20 connortsui20 changed the title Add declarative benchmark matrix with profiles Add declarative benchmark matrices and shared workflows Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants